﻿using System.Collections.Generic;
using NHibernate;
using NHibernate.Criterion;
using Neturion.Dados;
using Neturion.IRepositorios;

namespace Neturion.Repositorios
{
    public class RepositorioConta : IRepositorioConta
    {
        public Conta Inserir(Conta conta)
        {
            GerenciadorBDConfigs.Instance.SessaoAtual().Save(conta);
            return conta;
        }

        public Conta Atualizar(Conta conta)
        {
            Conta tmpConta = ObterPorId(conta.ContaId);
            // Atribuicao dos valores do objeto da memoria para o objeto obtido no banco de dados
            tmpConta.NumeroConta = conta.NumeroConta;
            tmpConta.Descricao = conta.Descricao;

            GerenciadorBDConfigs.Instance.SessaoAtual().Merge(tmpConta);
            return tmpConta;
        }

        public void Excluir(Conta conta)
        {
            GerenciadorBDConfigs.Instance.SessaoAtual().Delete(conta);
        }

        public IList<Conta> ObterTodos()
        {
            ICriteria criteria = GerenciadorBDConfigs.Instance.SessaoAtual().CreateCriteria(typeof(Conta));
            return criteria.List<Conta>() as List<Conta>;
        }

        public Conta ObterPorId(int id)
        {
            return GerenciadorBDConfigs.Instance.SessaoAtual().Get<Conta>(id);
        }

        public Conta ObterPorNumeroConta(string numeroConta)
        {
            ICriteria criteria = GerenciadorBDConfigs.Instance.SessaoAtual().CreateCriteria(typeof (Conta))
                .Add(Restrictions.Eq("NumeroConta", numeroConta));
            return criteria.UniqueResult<Conta>();
        }
    }
}